<?php 
	class Modelo{
		private $conexion;
	//	private $paquetes = array();
	//	private $periodos = array();
		public function __construct(){
			include_once "configuracion.php";
			require_once "curso.php";
			require_once "asignacion_curso.php";
			require_once "asignacion_paquete.php";
			require_once "periodo.php";
			require_once "paquete.php";
			require_once "interesado.php";
			$this->conexion=mysql_connect($host,$usuario,$password);
			if($this->conexion)
				mysql_select_db($database);
		}
		public function __destruct(){
			if($this->conexion){
				mysql_close($this->conexion);
			}
		}
		
		public function periodosActivos(){
			if($this->conexion){
				$query = "SELECT * FROM periodo WHERE estado = 'A' ";
				$resultado = mysql_query($query);
				$periodos = array();
				while($fila = mysql_fetch_assoc($resultado)){
					$periodo = new Periodo();
					$periodo->setIdPeriodo($fila['id_periodo']);
					$periodo->setInicioPeriodo($fila['inicio_periodo']);
					$periodo->setFinPeriodo($fila['fin_periodo']);
					$periodo->setEstado($fila['estado']);
					$periodos[] = $periodo; 
				}
				return $periodos;
			}else{
				return false;
			}
		
		}
		public function obtenerPeriodo($id_periodo){
			if($this->conexion){
				$query = "SELECT * FROM periodo WHERE id_periodo = '{$id_periodo}' ";
				$resultado = mysql_query($query);
				
				while($fila = mysql_fetch_assoc($resultado)){
					$periodo = new Periodo();
					$periodo->setIdPeriodo($fila['id_periodo']);
					$periodo->setInicioPeriodo($fila['inicio_periodo']);
					$periodo->setFinPeriodo($fila['fin_periodo']);
					$periodo->setEstado($fila['estado']);
				}
				return $periodo;
			}else{
				return false;
			}
		
		}
			public function obtenerPeriodoActivo($id_periodo){
			if($this->conexion){
				$query = "SELECT * FROM periodo WHERE id_periodo = '{$id_periodo}' AND estado='A' ";
				$resultado = mysql_query($query);
				
				while($fila = mysql_fetch_assoc($resultado)){
					$periodo = new Periodo();
					$periodo->setIdPeriodo($fila['id_periodo']);
					$periodo->setInicioPeriodo($fila['inicio_periodo']);
					$periodo->setFinPeriodo($fila['fin_periodo']);
					$periodo->setEstado($fila['estado']);
				}
				return $periodo;
			}else{
				return false;
			}
		
		}
		public function obtenerPaquete($id_paquete){
			if($this->conexion){
				$query = "SELECT * FROM paquete WHERE id_paquete = '{$id_paquete}' ";
				$resultado = mysql_query($query);
				
				while($fila = mysql_fetch_assoc($resultado)){
					$paquete = new Paquete();
					$paquete->setIdPaquete($fila['id_paquete']);
					$paquete->setNombrePaquete($fila['nombre_paquete']);
				}
				
				return $paquete;
			}
			else{
				return false;
			}
		}
		
		public function obtenerCurso($id_curso){
			if($this->conexion){
				$query = "SELECT * FROM curso WHERE id_curso = '{$id_curso}' ";
				$resultado = mysql_query($query);
				
				while($fila = mysql_fetch_assoc($resultado)){
					$curso = new Curso();
					$curso->setIdCurso($fila['id_curso']);
					$curso->setIdPaquete($fila['id_paquete']);
					$curso->setNombreCurso($fila['nombre_curso']);
					$curso->setDescripcionCurso($fila['descripcion_curso']);
					
					//Calculados
					$paquete = $this->obtenerPaquete($fila['id_paquete']);
					
					$curso->setPaquete($paquete);
				}
				return $curso;
			}
			else{
				return false;
			}
		}
		public function obtenerInteresado($id_interesado){
			if($this->conexion){
				$query = "
						SELECT * 
						FROM interesado
						WHERE id_interesado = '{$id_interesado}'
						";
				$resultado = mysql_query($query);
				while($fila = mysql_fetch_assoc($resultado)){
					$interesado = new Interesado();
					$interesado->setId($fila['id_interesado']);
					$interesado->setNombre($fila['nombre_interesado']);
					$interesado->setApellidoPaterno($fila['paterno_interesado']);
					$interesado->setApellidoMaterno($fila['materno_interesado']);
					$interesado->setEmail($fila['email_interesado']);
					$interesado->setTelefono($fila['telefono_interesado']);
					$interesado->setCuenta($fila['cuenta_interesado']);
					$interesado->setRFC($fila['rfc_interesado']);
					$interesado->setTipo($fila['tipo_interesado']);
				}
				return $interesado;
			}else{
				return false;
			}
		}
		#Recibe 2 cadenas devuelve objeto curso asignacion
		public function obtenerCursoAsignado($id_curso, $id_periodo){
			if($this->conexion){
				$query = "
						SELECT * 
						FROM asignacion_curso 
						WHERE id_periodo ='{$id_periodo}' AND id_curso = '{$id_curso}'
				";
				$resultado = mysql_query($query);
				while($fila = mysql_fetch_assoc($resultado)){
					$asig = new AsignacionCurso();
					$asig->setIdPeriodo($fila['id_periodo']);
					$asig->setIdCurso($fila['id_curso']);
					$asig->setIdSalon($fila['id_salon']);
					$asig->setCupo($fila['cupo']);
					$asig->setHorarioInicio($fila['horario_inicio']);
					$asig->setHorarioFin($fila['horario_fin']);
					$asig->setFechaInicio($fila['fecha_inicio']);
					$asig->setFechaFin($fila['fecha_fin']);
					#Valores Calculados
					$cupoDisponible = (integer)$fila['cupo'] - (integer)$this->numeroDeInscritos( $fila['id_curso'] , $fila['id_periodo'] );
					$curso = $this->obtenerCurso($fila['id_curso']);
					$asig->setCupoDisponible($cupoDisponible);
					$asig->setCurso($curso);
				}
				return $asig;
				
			}
		}
		//COMO asignacion_periodo tiene referencias a varias tablas es mas comodo trabajar
		//con un objeto que ya empaquete todo
		public function cursosPorPeriodo($periodo){
			if($this->conexion){
				$query = "SELECT * FROM asignacion_curso WHERE id_periodo ='{$periodo}'";
				$resultado = mysql_query($query);
				$paquetes = array();
				while($fila = mysql_fetch_assoc($resultado)){
					$asig = new AsignacionCurso();
					$asig->setIdPeriodo($fila['id_periodo']);
					$asig->setIdCurso($fila['id_curso']);
					$asig->setIdSalon($fila['id_salon']);
					$asig->setCupo($fila['cupo']);
					$asig->setHorarioInicio($fila['horario_inicio']);
					$asig->setHorarioFin($fila['horario_fin']);
					$asig->setFechaInicio($fila['fecha_inicio']);
					$asig->setFechaFin($fila['fecha_fin']);
					//Valores Calculados
					$cupoDisponible = (integer)$fila['cupo'] - (integer)$this->numeroDeInscritos( $fila['id_curso'] , $fila['id_periodo'] );
					$curso = $this->obtenerCurso($fila['id_curso']);
					$asig->setCupoDisponible($cupoDisponible);
					$asig->setCurso($curso);
					//Validamos si ya existe ese paquete
					$existe = false;
					$pqt =$curso->getPaquete()->getIdPaquete();
					foreach($paquetes AS $key){
						$pqt2 =$key->getPaquete()->getIdPaquete();
						if($pqt ==  $pqt2 ){
							$existe = true;
							$key->addCurso($curso);
							$key->addAsignacionCurso($asig);
							if($cupoDisponible <= 0){
								$key->setEstado("I");
							}
							break;
						}
					}
					//Si no existe agregamos un nuevo paquete
					if( !$existe ){
						$paquete = new AsignacionPaquete();
						$paquete->setPaquete($curso->getPaquete());
						$paquete->addCurso($curso);
						$paquete->addAsignacionCurso($asig);
						$paquete->setNombre($curso->getPaquete()->getNombrePaquete());
						if($cupoDisponible <= 0){
							$paquete->setEstado("I");
							}
						else{
							$paquete->setEstado("C");
						}
						$paquetes[] = $paquete;
					}	 
				}
				return $paquetes;
			
			}else{
				return false;
			}
		}
		
		public function numeroDeInscritos($id_curso,$id_periodo){
			if($this->conexion){
				$query = "SELECT * FROM asignacion_alumno WHERE id_periodo = '{$id_periodo}' AND id_curso='{$id_curso}'";
				$resultado = mysql_query($query);
				$num_row = mysql_num_rows($resultado);
				return $num_row;
			}	
			else{
				return false;
			}
		}
		//Falta crear una entidad de precio
		public function obtenerPrecio($id_periodo){
			if($this->conexion){
				$query = "SELECT * FROM precio WHERE id_periodo = '{$id_periodo}' ";
				$resultado = mysql_query($query);
				$row = mysql_fetch_object($resultado);
				return $row;
			}	
			else{
				return false;
			}
			
		}
		#Recibe objetos
		public function insertarInteresado(&$interesado){
			
			if( ($interesado instanceof Interesado) && $this->conexion){
				$query ="INSERT INTO interesado(nombre_interesado,
												paterno_interesado,
												materno_interesado,
												email_interesado,
												telefono_interesado,
												cuenta_interesado,
												rfc_interesado,
												tipo_interesado	)
						VALUES(
							'{$interesado->getNombre()}',
							'{$interesado->getApellidoPaterno()}',
							'{$interesado->getApellidoMaterno()}',
							'{$interesado->getEmail()}',
							'{$interesado->getTelefono()}',
							'{$interesado->getCuenta()}',
							'{$interesado->getRFC()}',
							'{$interesado->getTipo()}'
						)";
				$resultado = mysql_query($query,$this->conexion);
				if($resultado){
							$id=mysql_insert_id($this->conexion);
							$interesado->setId($id);
				}
				return $interesado;
			}
		}
		#Recibe cadenas
		public function asignarInteresadoACurso($id_periodo,$id_curso,$id_interesado,$paquete_interesado){
			if($this->conexion){
				$query = "
						INSERT INTO asignacion_interesado(id_periodo,id_curso,id_interesado,paquete_interesado)
						VALUES('{$id_periodo}','{$id_curso}',{$id_interesado},{$paquete_interesado})
				";
				$resultado = mysql_query($query,$this->conexion);
			}
		}
		
		//Transaccion de solicitud de inscripcion
		public function registrarInteresado($interesado,$periodo,$cursos){
			#Obteniendo los paquetes completos
			$paquetes = array();
			foreach($cursos as $key){
				$id_paquete = $key->getPaquete()->getIdPaquete();
				if(!(isset($paquetes[$id_paquete]))){
						$paquetes[$id_paquete ] = array();
				}
				array_push($paquetes[$id_paquete ], $key );
			}
			#Registrando interesado
			$this->insertarInteresado($interesado);
			foreach($paquetes as $paquete){
				foreach($paquete as $curso){
					$numero_de_cursos = count($paquete);
					#Modificar esta parte en el caso de que las reglas cambien
					if($numero_de_cursos >= 3){
						$precio_paquete = 1;
					}
					else{
						$precio_paquete = 0;
					}
					#Suscribiendo en cada curso
					$this->asignarInteresadoACurso($periodo->getIdPeriodo(),$curso->getIdCurso(),$interesado->getId(),$precio_paquete);
					
				}
			}
			$done = array( 
						'id_periodo' => $periodo->getIdPeriodo(),
						'id_interesado' => $interesado->getId() 
						);
			return $done;
		}
		
		public function obtenerInformacionSolicitudes($id_interesado,$id_periodo){
			$cursos_sueltos = array();
			$cursos_por_paquete = array();
			$interesado;
			$precio;
			$query = "
				SELECT asi.id_curso,asi.paquete_interesado,c.id_paquete
				FROM asignacion_interesado asi, curso c
				WHERE asi.id_interesado = '{$id_interesado}' AND asi.id_periodo = '{$id_periodo}'
				AND asi.id_curso = c.id_curso
			";
			$resultado = mysql_query($query);
			#Procesamos la inforamcion
			while($fila = mysql_fetch_assoc($resultado)){
				$id_curso = $fila['id_curso'];
				#Obtenemos los objetos curso
				#Y ordenamos en cursos y paquetes
				if($fila['paquete_interesado']){
					$id_paquete = $fila['id_paquete'];
					$cursos_por_paquete[$id_paquete][] = $this->obtenerCursoAsignado($id_curso,$id_periodo);
				}else{
					$cursos_sueltos[] = $this->obtenerCursoAsignado($id_curso,$id_periodo);
				}
			}
			#Obtenemos los objetos interesado
			$interesado = $this->obtenerInteresado($id_interesado);
			#Obtenemos los costos del periodo	
			$precio = $this->obtenerPrecio($id_periodo);
			#Retornamos un arreglo con todo
			$todo = array(
				'cursos_sueltos' => $cursos_sueltos,
				'cursos_por_paquete' => $cursos_por_paquete,
				'interesado' => $interesado,
				'precio' => $precio
			);
			return $todo;
			
		}
		
	
		
	
	
	}
?>